package org.addsome.leetcode;

import org.addsome.model.TreeNode;

/**
 * 563.二叉树的坡度
 * <p>
 * 给定一个二叉树，计算整个树的坡度。
 * <p>
 * 一个树的节点的坡度定义即为，该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。
 * <p>
 * 整个树的坡度就是其所有节点的坡度之和。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/binary-tree-tilt
 *
 * @author XieKen
 * @date 2020/4/5
 **/
public class BinaryTreeTilt {
    public int findTilt(TreeNode root) {
        if (root==null){
            return 0;
        }
        return findTilt(root.right) + findTilt(root.left) + Math.abs(treeSum(root.right) - treeSum(root.left));
    }

    public int treeSum(TreeNode root) {
        if (root == null) {
            return 0;
        }
        return root.val + treeSum(root.left) + treeSum(root.right);
    }
}
